package pincipal.pack;

import java.util.ArrayList;

import materiales.Material;

import database.Consulta;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class SeleccionarMaterial extends Activity {

	private ListView listaMateriales;
	private ArrayList<Material> arrayMat = new ArrayList<Material>();
	private ArrayList<String> seleccionados;
	private ArrayList<String> seleccionadosAqui;
	private ArrayList<String> rendimientos;
	private ArrayList<String> lista = new ArrayList<String>();
	private ImageView iconoBusqueda;
	private EditText filtro;
	private Button aceptar;
	private Button cancelar;
	
	private ArrayAdapter<String> adaptadorSimple;
	private ArrayAdapter<String> adaptadorAux;
	private Bundle bundle;
	private String volver;
	
	@Override
	public void onCreate(Bundle savedInstanceState )
	{

		bundle = getIntent().getExtras();
		super.onCreate(savedInstanceState);
		requestWindowFeature( Window.FEATURE_NO_TITLE );
		setContentView(R.layout.seleccionarmateriales);
		getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
		this.filtro = (EditText)findViewById(R.id.filtro);
	
		this.iconoBusqueda = (ImageView)findViewById(R.id.iconoBusqueda);
		this.iconoBusqueda.setImageResource(android.R.drawable.ic_menu_search);	
		this.listaMateriales = (ListView)findViewById(R.id.lista);
		this.listaMateriales.setTextFilterEnabled(true);	
		this.aceptar = (Button)findViewById(R.id.botonFinalizar);
		this.cancelar = (Button)findViewById(R.id.botonCancelar);

		volver = bundle.getString("VOLVER");
		seleccionados = bundle.getStringArrayList("SELECCIONADOS");
		rendimientos = bundle.getStringArrayList("LISTARENDIMIENTOS");
		seleccionadosAqui = new ArrayList<String>();
		
		Cursor fila =(Cursor)Consulta.consultMateriales(SeleccionarMaterial.this);
		int i = 0;
		if (fila.moveToFirst())
        {
        	do {
    
        		lista.add(lista.size(),fila.getString(1) ) ;
        		this.arrayMat.add(this.arrayMat.size(), new Material(fila.getInt(0), fila.getString(1), fila.getString(2), fila.getString(3), fila.getString(4)));
                i++;
           } while(fila.moveToNext());    	
        }      
        if (! fila.moveToFirst())
        {
        	Toast.makeText(this, "No existen materiales registrados", Toast.LENGTH_SHORT).show();
        }
        
        adaptadorSimple = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lista);
        adaptadorSimple.setNotifyOnChange(true);
        
        removerSeleccionados();
        adaptadorAux = adaptadorSimple;
		listaMateriales.setAdapter(adaptadorSimple);
		
		listaMateriales.setOnItemClickListener( new OnItemClickListener()
		{
			public void onItemClick(AdapterView<?> a, View v, int position, long id) 
    		{
	    		String material = (listaMateriales.getItemAtPosition(position)).toString();
				if(!seleccionados.contains(material))
				{
					seleccionadosAqui.add(material);
					if ( filtro.getText().toString().length() == 0)
					{
						lista.remove(position);
						adaptadorSimple.notifyDataSetChanged();
						Toast.makeText(SeleccionarMaterial.this, material+" agregado a partida", Toast.LENGTH_SHORT).show();
					}
					else
					{
						removerIndice(material);
					}
			
				}
				else
				{
					Toast.makeText(SeleccionarMaterial.this, material+" ya existe en partida", Toast.LENGTH_SHORT).show();
				}
			}
		});
		
		
		this.aceptar.setOnClickListener(new OnClickListener() 
		{	
			public void onClick(View arg0) 
			{
				agregarSeleccionados();
				Bundle bundl = new Bundle();
				bundl.putString("NOMBRENUEVO", bundle.getString("NOMBRENUEVO"));
				bundl.putString("NOMBREORIGINAL", bundle.getString("NOMBREORIGINAL"));
				bundl.putString("OBSERVACION", bundle.getString("OBSERVACION"));
				bundl.putStringArrayList("LISTA", seleccionados);	
				bundl.putStringArrayList("LISTARENDIMIENTOS", rendimientos);
				if(volver.equals("EditarPartida"))
				{
					Intent intent = new Intent(SeleccionarMaterial.this, EditarPartida.class );
					intent.putExtras(bundl);
					startActivity(intent);
				}
				else
				{
					Intent intent = new Intent(SeleccionarMaterial.this, AgregarPartida.class );
					intent.putExtras(bundl);
					startActivity(intent);
				}
			}
		});
		
		this.cancelar.setOnClickListener(new OnClickListener() 
		{	
			public void onClick(View arg0) 
			{
				if(volver.equals("EditarPartida"))
				{
					Bundle bundl = new Bundle();
					bundl.putString("NOMBRENUEVO", bundle.getString("NOMBRENUEVO"));
					bundl.putString("NOMBREORIGINAL", bundle.getString("NOMBREORIGINAL"));
					bundl.putString("OBSERVACION", bundle.getString("OBSERVACION"));
					bundl.putStringArrayList("LISTA", seleccionados);	
					bundl.putStringArrayList("LISTARENDIMIENTOS", rendimientos);
					Intent intent = new Intent(SeleccionarMaterial.this, EditarPartida.class );
					intent.putExtras(bundl);
					startActivity(intent);
				}
				else
				{
					Bundle vacio = new Bundle();
					vacio.putString("NOMBREORIGINAL", bundle.getString("NOMBREORIGINAL"));
					vacio.putString("OBSERVACION", bundle.getString("OBSERVACION"));
					vacio.putStringArrayList("LISTA", seleccionados);
					vacio.putStringArrayList("LISTARENDIMIENTOS", rendimientos);
					Intent intent = new Intent(SeleccionarMaterial.this, AgregarPartida.class );
					intent.putExtras(vacio);
					startActivity(intent);
				}

			}
		});
		
		
		registerForContextMenu(this.listaMateriales);
		
		filtro.addTextChangedListener( new TextWatcher()
		{
			public void afterTextChanged(Editable s) {
			}
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
			}
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				adaptadorSimple.getFilter().filter(s);
			}
		}
		);
	}
	
	
	class AdaptadorMateriales extends ArrayAdapter {

    	Activity context;
    	
    	@SuppressWarnings("unchecked")
    	public AdaptadorMateriales(Activity context) 
    	{
    		super(context, R.layout.list_item, lista);
    		this.context = context;
    		
    	}
    		
    	public View getView(int position, View convertView, ViewGroup parent) {
    		LayoutInflater inflater = context.getLayoutInflater();
    		
    		View item = inflater.inflate(R.layout.list_item_material, null);
    		
    		ImageView icono = (ImageView)item.findViewById(R.id.icono);
    		icono.setImageResource(R.drawable.icono_materiales);
    		
    		TextView nombre = (TextView)item.findViewById(R.id.tituloItem);
    		nombre.setText(lista.get(position));
    		
    		return(item);
    	}
    	
    }

	private void agregarSeleccionados()
	{
		for(int i = 0; i<seleccionadosAqui.size(); i++)
		{
			seleccionados.add(seleccionadosAqui.get(i));
			rendimientos.add("");
		}
		
	}
	
	private int buscarIdPartida(String nombre)
	{
		for (int i = 0; i < arrayMat.size(); i++)
		{
			if ( arrayMat.get(i).getNombre().equals(nombre))
			{
				return i;
			}
		}
		return 0;
	}


	private void verMaterial(int position)
	{
		Bundle bundle = new Bundle();
		Material clickeado = arrayMat.get(position);
		
		bundle.putInt("ID", position);
		bundle.putString("NOMBRE", clickeado.getNombre());
		bundle.putString("UNIDAD", clickeado.getUnidad());
		bundle.putString("COSTOUF", clickeado.getPrecio());
		bundle.putString("OBSERVACION", clickeado.getObservacion());
		
		Intent intent = new Intent(SeleccionarMaterial.this, VerMaterial.class);
		intent.putExtras(bundle);
		startActivity(intent);
	}
	
	private void removerSeleccionados()
	{
		for (int i = 0; i < seleccionados.size(); i++)
		{
			for (int j = 0; j < lista.size(); j++)
			{
				if ( lista.get(j).equals(seleccionados.get(i)))
				{
					lista.remove(j);
					
				}
			}
		}
		adaptadorSimple.notifyDataSetChanged();
	}
	
	private void removerIndice(String item)
	{
		for (int i = 0; i < arrayMat.size(); i++)
		{
			if ( arrayMat.get(i).getNombre().equals(item))
			{
				lista.remove(arrayMat.get(i).getId());
			}
		}
		adaptadorSimple.notifyDataSetChanged();
	}
}

	
